(function () {
    "use strict";

    angular.module('core').controller('dashboardPagarController', controller);
    controller.$inject = ['$scope', '$filter', 'configService', 'toolsService', 'financeiroService'];

    function controller($scope, $filter, configService, toolsService, financeiroService) {
        $scope.initializeLayout('Dashboard do Contas a Pagar');

        $scope.state = {
            data: [],
        };

        $scope.charts = {
            vencidosVencerMes: {
                data: [],
                carregando: false,
                vazio: false
            },
            evolucaoMes: {
                data: [],
                carregando: false,
                vazio: false
            },
            receberCategoria: {
                data: [],
                carregando: false,
                vazio: false
            },
            receberCentroCusto: {
                data: [],
                carregando: false,
                vazio: false
            },
            receberTipoPagamento: {
                data: [],
                carregando: false,
                vazio: false
            }
        }

        /* funções */
        $scope.initialize = function () {
            $scope.refresh();
        };

        $scope.getResumos = function () {
            financeiroService.getResumoPagar().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                   } else {
                       $scope.state.data.resumos = response.Data;
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
               }
           );
        }
        $scope.getChartVencidosVencerPorMes = function () {
            $scope.charts.vencidosVencerMes.carregando = true;
            $scope.charts.vencidosVencerMes.vazio = false;

            financeiroService.getChartPagarVencidosVencerPorMes().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                       $scope.charts.vencidosVencerMes.carregando = false;
                   } else {
                       angular.copy(angular.fromJson(response.Data), $scope.charts.vencidosVencerMes.data);
                       $scope.charts.vencidosVencerMes.carregando = false;
                       setTimeout(function () {
                           toolsService.buildChart('#chart-vencidos-vencer-mes', 'Contas Vencidas/Vencer', $scope.charts.vencidosVencerMes.data, true);
                           $scope.charts.vencidosVencerMes.vazio = ($scope.charts.vencidosVencerMes.data == 0);
                       }, 500)
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
                   $scope.charts.evolucaoReceber.carregando = false;
               }
           );
        }
        $scope.getChartEvolucaoPorMes = function () {
            $scope.charts.evolucaoMes.carregando = true;
            $scope.charts.evolucaoMes.vazio = false;

            financeiroService.getChartPagarEvolucaoPorMes().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                       $scope.charts.evolucaoMes.carregando = false;
                   } else {
                       angular.copy(angular.fromJson(response.Data), $scope.charts.evolucaoMes.data);
                       $scope.charts.evolucaoMes.carregando = false;
                       setTimeout(function () {
                           toolsService.buildChart('#chart-evolucao-por-mes', 'Evolução de contas a receber', $scope.charts.evolucaoMes.data, true);
                           $scope.charts.evolucaoMes.vazio = ($scope.charts.evolucaoMes.data == 0);
                       }, 500)
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
                   $scope.charts.evolucaoMes.carregando = false;
               }
           );
        }
        $scope.getChartPagarPorCategoriaMes = function () {
            $scope.charts.receberCategoria.carregando = true;
            $scope.charts.receberCategoria.vazio = false;

            financeiroService.getChartPagarPorCategoriaMes().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                       $scope.charts.receberCategoria.carregando = false;
                   } else {
                       angular.copy(angular.fromJson(response.Data), $scope.charts.receberCategoria.data);
                       $scope.charts.receberCategoria.carregando = false;
                       setTimeout(function () {
                           toolsService.buildChart('#chart-categoria-receber', 'Contas a receber por categoria', $scope.charts.receberCategoria.data, true);
                           $scope.charts.receberCategoria.vazio = ($scope.charts.receberCategoria.data == 0);
                       }, 500)
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
                   $scope.charts.receberCategoria.carregando = false;
               }
           );
        }
        $scope.getContasPagarPorCentroCusto = function () {
            $scope.charts.receberCentroCusto.carregando = true;
            $scope.charts.receberCentroCusto.vazio = false;

            financeiroService.getContasPagarPorCentroCusto().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                       $scope.charts.receberCentroCusto.carregando = false;
                   } else {
                       angular.copy(angular.fromJson(response.Data), $scope.charts.receberCentroCusto.data);
                       $scope.charts.receberCentroCusto.carregando = false;
                       setTimeout(function () {
                           toolsService.buildChart('#chart-centroCusto-receber', 'Contas a receber por Centro Custo', $scope.charts.receberCentroCusto.data, true);
                           $scope.charts.receberCentroCusto.vazio = ($scope.charts.receberCentroCusto.data == 0);
                       }, 500)
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
                   $scope.charts.receberCategoria.carregando = false;
               }
           );
        }
        $scope.getChartPagarPorTipoPagamentoMes = function () {
            $scope.charts.receberTipoPagamento.carregando = true;
            $scope.charts.receberTipoPagamento.vazio = false;

            financeiroService.getChartPagarPorTipoPagamentoMes().then(
               function (response) {
                   if (response.Status < 0) {
                       $scope.tools.toastr.error(response.Message, 'Serviço');
                       console.error(response.Exception);
                       $scope.charts.receberTipoPagamento.carregando = false;
                   } else {
                       angular.copy(angular.fromJson(response.Data), $scope.charts.receberTipoPagamento.data);
                       $scope.charts.receberTipoPagamento.carregando = false;
                       setTimeout(function () {
                           toolsService.buildChart('#chart-tipo-pagamento-receber', 'Contas a receber por tipo de pagamento', $scope.charts.receberTipoPagamento.data, true);
                           $scope.charts.receberTipoPagamento.vazio = ($scope.charts.receberTipoPagamento.data == 0);
                       }, 500)
                   }
               },
               function (_error) {
                   $scope.tools.toastr.error('Não foi possível acessar o(s) servidor(es)');
                   console.error(_error);
                   $scope.charts.receberTipoPagamento.carregando = false;
               }
           );
        }

        $scope.refresh = function () {
            $scope.getResumos();
            $scope.getChartVencidosVencerPorMes();
            $scope.getChartEvolucaoPorMes();
            $scope.getChartPagarPorCategoriaMes();
            $scope.getChartPagarPorTipoPagamentoMes();
            $scope.getContasPagarPorCentroCusto();
        };

        $scope.initialize();

    }

})();